#include "List.cpp"

//给你两个非空 的链表，表示两个非负的整数。它们每位数字都是按照逆序的方式存储的，并且每个节点只能存储一位数字。
//
//请你将两个数相加，并以相同形式返回一个表示和的链表。
//
//你可以假设除了数字 0 之外，这两个数都不会以 0开头。
//

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    // 进位符号
    int flag = 0;
    ListNode* p = l1;
    ListNode* q = l2;
    ListNode* head = (ListNode*) malloc(sizeof(ListNode));
    head->next = NULL;
    ListNode* pos = head;
    while (p != NULL || q != NULL) {
        int temp = flag;
        if (p != NULL) {
            temp += p->data;
            p = p->next;
        }
        if (q != NULL) {
            temp+= q->data;
            q = q->next;
        }
        //进位符重置
        flag = temp/10;
        // 申请空间,初始化值
        ListNode* now = (ListNode*) malloc(sizeof(ListNode));
        now->data = temp%10;
        now->next = NULL;
        // 尾插
        pos->next = now;
        pos = pos->next;
    }

    if (flag == 1) {
        ListNode* now = (ListNode*) malloc(sizeof(ListNode));
        now->data = 1;
        now->next = NULL;
        pos->next = now;
    }
    return head->next;
}


int main() {

    int number1[] = {1};
    int number2[] = {9,9,9};
    ListNode* a = CreateListByArray(number1, ARRAY_SIZE(number1));
    ListNode* b = CreateListByArray(number2, ARRAY_SIZE(number2));
    ListNode* newList = addTwoNumbers(a, b);
    PrintList(newList);
}